#include <iostream>
#include <memory>
#include "Abstraction.h"
#include "Implementation.h"
int main(int argc, char *argv[])
{

    // 创建具体的实现对象
    std::shared_ptr<Implementation> implA = std::make_shared<ConcreteImplementationA>();
    std::shared_ptr<Implementation> implB = std::make_shared<ConcreteImplementationB>();

    // 使用不同的实现对象创建具体的抽象对象
    std::shared_ptr<Abstraction>  abstractionA= std::make_shared<RefinedAbstraction>(implA);
    std::shared_ptr<Abstraction>  abstractionB= std::make_shared<RefinedAbstraction>(implB);

    // 调用抽象接口，实际执行对应的实现操作
    abstractionA->operation();
    abstractionB->operation();


    return 0;
}
